"""
@classmethod 是一个装饰器，用于定义类方法。类方法与静态方法类似，但有一个关键的区别：类方法接收一个特殊的第一个参数 cls，
它代表类本身，而不是类的实例。类方法可以访问和修改类的状态，而不仅仅是实例的状态。

类方法的特点
- 接收 cls 参数：类方法的第一个参数是 cls，它代表类本身。
- 可以通过类或实例调用：类方法可以通过类名或实例名来调用。
- 可以访问和修改类属性：类方法可以访问和修改类级别的数据（即类属性）
"""


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_string(cls, person_str):
        """从字符串创建 Person 实例。"""
        name, age = person_str.split(',')
        return cls(name, int(age))

    @classmethod
    def from_dict(cls, person_dict):
        """从字典创建 Person 实例。"""
        return cls(person_dict['name'], person_dict['age'])


# 通过类名调用类方法
person1 = Person.from_string("Alice,30")
print(person1.name)  # 输出: Alice
print(person1.age)  # 输出: 30

person2 = Person.from_dict({'name': 'Bob', 'age': 25})
print(person2.name)  # 输出: Bob
print(person2.age)  # 输出: 25

# 也可以通过实例调用类方法
person_instance = Person("Charlie", 40)
person3 = person_instance.from_string("David,35")
print(person3.name)  # 输出: David
print(person3.age)  # 输出: 35
